//package com.inspur.edp.bff.designtime.generator.core.entityimpl.serializer;
//
//import com.inspur.edp.caf.generator.baseInfo.ParameterInfo;
//import com.inspur.edp.caf.generator.baseInfo.TypeInfo;
//import com.inspur.edp.caf.generator.method.ClassMethodGenerator;
//import com.inspur.edp.cef.designtime.api.IGspCommonField;
//import com.inspur.edp.cef.designtime.api.element.GspElementObjectType;
//import com.inspur.edp.cef.generator.DotNetToJavaStringHelper;
//import com.inspur.edp.cef.generator.coreGenerator.base.entityGenerator.CefDataTypeImplGeneratorContext;
//import com.inspur.edp.cef.spi.jsonser.base.StringUtils;
//import com.inspur.edp.formserver.viewmodel.GspViewModelElement;
//import java.util.ArrayList;
//import java.util.Arrays;
//import org.eclipse.jdt.core.dom.AST;
//import org.eclipse.jdt.core.dom.Block;
//import org.eclipse.jdt.core.dom.ClassInstanceCreation;
//import org.eclipse.jdt.core.dom.MethodInvocation;
//import org.eclipse.jdt.core.dom.Modifier;
//import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
//import org.eclipse.jdt.core.dom.ParameterizedType;
//import org.eclipse.jdt.core.dom.ReturnStatement;
//import org.eclipse.jdt.core.dom.Statement;
//import org.eclipse.jdt.core.dom.StringLiteral;
//import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
//import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
//
//public class GetPropertyNameMapMethodGenerator extends ClassMethodGenerator {
//
//  private CefDataTypeImplGeneratorContext nodeTypeGenContext;
//
//  public GetPropertyNameMapMethodGenerator(
//      CefDataTypeImplGeneratorContext nodeTypeGenContext) {
//    this.nodeTypeGenContext = nodeTypeGenContext;
//  }
//
//
//  // region MethodBody
//  @Override
//  protected Block buildMethodBody() {
//    Block rez = ast.newBlock();
//    String para_dic = "dic";
//    java.util.ArrayList<Statement> list = new java.util.ArrayList();
//    ClassInstanceCreation classInstanceCreation = ast.newClassInstanceCreation();
//    classInstanceCreation.setType(this.getStringHashMap());
//    VariableDeclarationFragment variableDeclarationFragment = ast.newVariableDeclarationFragment();
//    variableDeclarationFragment.setInitializer(classInstanceCreation);
//    variableDeclarationFragment.setName(ast.newSimpleName(para_dic));
//    VariableDeclarationStatement variableDeclarationStatement = ast
//        .newVariableDeclarationStatement(variableDeclarationFragment);
//
//    variableDeclarationStatement.setType(getStringHashMap());
//    list.add(variableDeclarationStatement);
//
//    for (IGspCommonField gspCommonField : nodeTypeGenContext.dataType
//        .getContainElements()) {
//      GspViewModelElement viewModelElement = (GspViewModelElement) gspCommonField;
//      if (viewModelElement.getIsVirtual()) {
//        continue;
//      }
//      if (DotNetToJavaStringHelper.isNullOrEmpty(viewModelElement.getMapping().getTargetObjId())) {
//        throw new RuntimeException(
//            "#GspBefError# 字段" + viewModelElement.getCode() + " 的Mapping字段ID不允许为空#GspBefError#");
//      }
//      addElementMapBlock(viewModelElement, list, para_dic);
//    }
//    list.add(buildReturnStatement(ast, para_dic));
//    rez.statements().addAll(list);
//    return rez;
//  }
//
//  private void addElementMapBlock(GspViewModelElement vmElement,
//      java.util.ArrayList<Statement> list, String dicPara) {
//    // todo:此处只返回普通字段
//    if (vmElement.getIsUdt() || vmElement.getIsVirtualViewElement()
//        || vmElement.getObjectType() != GspElementObjectType.None) {
//      return;
//    }
//    list.add(buildAddDicItem(dicPara, vmElement.getLabelID(), StringUtils.toCamelCase(vmElement.getLabelID())));
//  }
//
//  private ParameterizedType getStringHashMap() {
//    ParameterizedType parameterizedType =
//        ast.newParameterizedType(ast.newSimpleType(ast.newSimpleName("HashMap")));
//    parameterizedType.typeArguments().add(new TypeInfo(String.class).getType(ast));
//    parameterizedType.typeArguments().add(new TypeInfo(String.class).getType(ast));
//    return parameterizedType;
//  }
//
//  /**
//   * return dic;
//   */
//  private static ReturnStatement buildReturnStatement(AST ast, String dicPropName) {
//    ReturnStatement returnStatement = ast.newReturnStatement();
//    returnStatement.setExpression(ast.newSimpleName(dicPropName));
//    return returnStatement;
//  }
//
//  /**
//   * dic.add(transferPropName,voElementLabelId);
//   *
//   * @param dicPropName 字典属性名
//   * @param voElementLabelId vo字段标签
//   * @param transferPropName 传到前端属性名
//   */
//  private Statement buildAddDicItem(
//      String dicPropName, String voElementLabelId, String transferPropName) {
//
//    MethodInvocation putMethodInvocation = ast.newMethodInvocation();
//    putMethodInvocation.setExpression(ast.newSimpleName(dicPropName));
//    putMethodInvocation.setName(ast.newSimpleName("put"));
//    StringLiteral keyLiteral = ast.newStringLiteral();
//    keyLiteral.setLiteralValue(transferPropName);
//    putMethodInvocation.arguments().add(keyLiteral);
//    StringLiteral valueLiteral = ast.newStringLiteral();
//    valueLiteral.setLiteralValue(voElementLabelId);
//    putMethodInvocation.arguments().add(valueLiteral);
//
//    return ast.newExpressionStatement(putMethodInvocation);
//  }
//
//  @Override
//  protected ArrayList<Modifier.ModifierKeyword> getAccessModifiers() {
//    return new ArrayList<Modifier.ModifierKeyword>(Arrays.asList(
//        new Modifier.ModifierKeyword[]{ModifierKeyword.PUBLIC_KEYWORD}));
//  }
//
//  @Override
//  protected boolean getIsOverride() {
//    return true;
//  }
//
//  @Override
//  protected String getMethodName() {
//    return "getTransferPropertyNameMap";
//  }
//
//  @Override
//  protected ArrayList<ParameterInfo> getParameterCollection() {
//    return null;
//  }
//
//  @Override
//  protected TypeInfo getReturnType() {
//    addImport(java.util.HashMap.class.getName());
//    return getHashMapStringTypeInfo();
//  }
//
//  private TypeInfo getHashMapStringTypeInfo() {
//    TypeInfo info = new TypeInfo(java.util.HashMap.class);
//    info.setIsParameterizedType(true);
//    ArrayList<TypeInfo> genericTyeps = new ArrayList<>(2);
//    genericTyeps.add(new TypeInfo(String.class));
//    genericTyeps.add(new TypeInfo(String.class));
//    info.setArguments(genericTyeps);
//    return info;
//  }
//}